import md5 from 'md5';

/**
 * 获取签名
 * @param {number} timestamp 时间戳
 * @param {number} nonce 随机数
 * @param {string} data 前端传入的数据
 * @param {string} [token=''] token
 */
export const getSign = (params: {
  timestamp: number;
  nonce: number;
  data: any;
  token?: string;
}) => {
  const { timestamp, nonce, data = {}, token = '' } = params;
  const values = Object.keys({
    ...data,
    time: timestamp - nonce,
    token
  })
    .map(key => `${key}:${data[key]}`)
    .join('&');
  const hash = values;

  /**
   * 1. hash 值去掉最后两位
   * 2. 获取 0 到总长度除以 2 的字符串
   * 3. 转换成大写
   * 4. 得到MD5签名
   * 5. 再次转换成大写
   */
  const hashStr = hash.substring(0, hash.length - 2);
  const hashStrLength = hashStr.length;
  const hashStrHalf = hashStr.substring(0, hashStrLength / 2).toUpperCase();
  const sign = md5(hashStrHalf).toUpperCase();

  return sign;
};
